package com.itcast.demo02.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 测试完整的Spring生命周期
 **/
public class Student implements BeanNameAware,ApplicationContextAware,InitializingBean,DisposableBean {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }


    public void setName(String name) {

        System.out.println("第二部: 设置属性");

        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Student() {
        System.out.println("第一步：实例化对象");
    }

    public void setBeanName(String s) {
        // 将注册到容器的beanName 进行返回
        System.out.println("第三步：得到bean的注册名称==>" + s);
    }
    public void destroy() throws Exception {
        System.out.println("第十步：执行spring的销毁方法");
    }
    public void afterPropertiesSet() throws Exception {
        System.out.println("第六步：属性设置后执行的方法");
    }
    //  @Configuration
    //  配置类
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        // applicationContext  容器对象
        System.out.println("第四步：得到beanFactory工厂对象");
    }

    public void haha(){
        //第五步执行初始化之前执行的方法
        System.out.println("第七步：执行自己配置的初始化方法");
    }

    /**
     * bean自己的业务方法  代表bean此时正在使用中
     */
    public void run(){
        System.out.println("第九步：执行对象本身的业务方法");
    }
    public void xixi(){
        System.out.println("第十一步：执行自定义的销毁方法");
    }
}
